#include "fichier.h"
#include "options.h"
#include "bdd.h"

fichier::fichier( const QString & name )
{
    this->leFichier = new QFile(name);
}
fichier::~fichier()
{
    delete this->leFichier;
}

fichier &fichier::operator =(const fichier &f )
{
    return *this;
}

int fichier::Existe()
{
    options opt;
    bdd db = bdd(opt.nomBdd());
    QString requete = "SELECT idFichier FROM fichier WHERE nomFichier ="
            + db.TexteVersSql(this->leFichier->fileName());
    return db.EstDansLaBase(requete);
}

void fichier::Enregistre()
{
    options opt;
    bdd db = bdd(opt.nomBdd());
    QString requete;

    // Si le fichier n'existe pas on le crée
    if (this->Existe() == -1)
    {
        requete = "INSERT INTO fichier(idFichier, nomFichier, langueFilm, cdFilm, idFilm, idDossier)"
                "VALUES(NULL, "
                + db.TexteVersSql(this->leFichier->fileName()) + ", "
                + db.TexteVersSql(this->langueFilm) + ", "
                + db.TexteVersSql(QString::number(this->cdFilm)) + ", "
                + db.TexteVersSql(QString::number(this->idFilm)) + ", "
                + db.TexteVersSql(QString::number(this->idDossier)) + ")";
    }
    // Si plusieurs fichiers ayant le même nom sont trouvés
    else if (this->Existe() == -2)
    {
        QMessageBox msg(QMessageBox::Warning,"Erreur lors de l'enregistrement d'un fichier",
                        "Plusieurs fichiers avec le même nom ont été trouvés dans la base !");
        msg.exec();
    }
    // Sinon on le modifie
    else
    {
        requete = "UPDATE fichier SET "
                "langueFilm = " + db.TexteVersSql(this->langueFilm) + ", "
                "cdFilm = " + db.TexteVersSql(QString::number(this->cdFilm)) + ", "
                "idFilm = " + db.TexteVersSql(QString::number(this->idFilm)) + ", "
                "WHERE idFichier = "  + db.TexteVersSql(QString::number(this->idFichier));

    }

    db.Execute(requete);
}

void fichier::Supprime()
{
    options opt;
    bdd db = bdd(opt.nomBdd());
    QString requete = "DELETE FROM fichier WHERE nomFichier="+db.TexteVersSql(this->leFichier->fileName());
    db.Execute(requete);
}

QList<fichier *> fichier::ListeFichiers()
{
    options opt;
    bdd db = bdd(opt.nomBdd());
    QString requete = "SELECT idFichier, nomFichier, langueFilm, cdFilm, idFilm, idDossier FROM fichier";
    db.Execute(requete);

    QList<fichier *> listeFichiers;
    fichier* unFichier;

    while(db.Requete().next())
    {
        unFichier = new fichier((db.Requete().value(1)).toString());
        unFichier->idFichier = db.Requete().value(0).toInt();
        unFichier->langueFilm = db.Requete().value(2).toString();
        unFichier->cdFilm = db.Requete().value(3).toInt();
        unFichier->idFilm = db.Requete().value(4).toInt();
        unFichier->idDossier = db.Requete().value(5).toInt();
        listeFichiers << unFichier;

    }
    return listeFichiers;
}




void fichier::setCdFilm(int cd)
{
    this->cdFilm = cd;
}

void fichier::setLangueFilm(QString langue)
{
    this->langueFilm = langue;
}

void fichier::setIdFilm(int id)
{
    this->idFilm = id;
}

void fichier::setIdDossier(int id)
{
    this->idDossier = id;
}
void fichier::setFile(QFile *unFichier)
{
    this->leFichier = unFichier;
}

QFile* fichier::file()
{
    return this->leFichier;
}

void fichier::enregistrement()
{
    this->Enregistre();
}
